package project;

import java.util.List;

public interface GameStateIF {
	/**
	 * Returns a list of possible, valid moves for this GameState
	 * @return A list of possible, valid moves
	 */
	List<Move> validMoves();
	
	/**
	 * Returns an exact copy of the current GameState
	 * @return An exact copy of the current GameState
	 */
	GameState clone();
	
	/**
	 * Applies a move to the current GameState and returns the current, updated GameState
	 * @param move The move you want to apply
	 */
	GameState applyMove(Move move);
	
	/**
	 * Returns the games raw grid
	 * @return The raw grid
	 */
	int[][] getGrid();
	
	/**
	 * Returns an array of the two PlayerStates in the GameState
	 * @return An array of length 2 containing 2 PlayerState's
	 */
	PlayerState[] getPlayers();
	
	/**
	 * Returns the winner if the game is over, GameState.GAMENOTOVER otherwise
	 * @return An int representing the winner, or GameState.GAMENOTOVER
	 */
	int gameOver();
}
